package businessObject;

import java.util.ArrayList;
import java.util.List;

import data.IEstadoDAO;
import data.ILugarDAO;
import data.IMascotaDAO;
import data.IUbicacionDAO;
import data.IUsuarioDAO;
import data.IZonaDAO;
import data.JDBCAnuncioDAO;
import data.JDBCEstadoDAO;
import data.JDBCLugarDAO;
import data.JDBCMascotaDAO;
import data.JDBCUbicacionDAO;
import data.JDBCUsuarioDAO;
import data.JDBCZonaDAO;
import dataTransferObject.Lugar;
import dataTransferObject.Mascota;
import dataTransferObject.Ubicacion;
import dataTransferObject.Usuario;
import dataTransferObject.Zona;

public class PerroPerdido {
	private static PerroPerdido perroPerdido;
	private List<Zona> zonas;

	public static synchronized PerroPerdido getInstance() {
		if (perroPerdido == null) {
			perroPerdido = new PerroPerdido();
		}
		return perroPerdido;
	}

	private PerroPerdido() {
		zonas = new ArrayList<Zona>();
		IZonaDAO jdbc = new JDBCZonaDAO();
		zonas = jdbc.selectAllZonas();
	}

	/**
	 * Inserta un nuevo Estado a los amigos asociados a un idUsuario
	 * 
	 */
	public Boolean enviarMensajesDePerdidaAUsuarios(List<Integer> idUsuarios,
			Usuario duenyo, Lugar lugar, Mascota mascota) {
		Boolean res = false;
		IEstadoDAO jdbcEstado = new JDBCEstadoDAO();

		for (Integer idUsuario : idUsuarios) {
			jdbcEstado.insertEstado(idUsuario, "Se ha perdido la mascota de: "
					+ duenyo.getNombre() + " con nombre " + mascota.getNombre()
					+ " en: " + lugar.getNombre());

		}
		jdbcEstado.insertEstado(duenyo.getIdUsuario(), "Se me ha perdido mi "
				+ mascota.getRaza().getNombre() + ": " + mascota.getNombre()
				+ " en: " + lugar.getNombre());
		return res;

	}
	public Boolean enviarMensajesDePerdidaALugares(List<Integer> idLugares,Usuario duenyo, Lugar lugar, Mascota mascota) {
		Boolean res = false;
		JDBCAnuncioDAO jdbca=new JDBCAnuncioDAO();
		for (Integer idLugar : idLugares) {
			jdbca.insertAnuncio(mascota.getIdMascota(), idLugar, "Se ha perdido la mascota de: "
					+ duenyo.getNombre() + " con nombre " + mascota.getNombre()	+ " en: " + lugar.getNombre());
		}
		return res;

	}

	public List<Lugar> getLugaresCercanosYPertenecientesZona(Integer idLugar) {

		IUbicacionDAO jdbc = new JDBCUbicacionDAO();
		Integer idUbicacion = jdbc.getUbicacionByLugar(idLugar);

		List<Ubicacion> ubCercanas = jdbc.getUbicacionesCercanas(idUbicacion);

		ILugarDAO jdbcl = new JDBCLugarDAO();
		List<Lugar> lugares = jdbcl.getLugares(ubCercanas);

		return lugares;
	}
	public void cambiarEstadoDuenyoPerdida(Usuario duenyo, Lugar lugar,Mascota mascota) {
		IEstadoDAO jdbcEstado = new JDBCEstadoDAO();
		jdbcEstado.insertEstado(duenyo.getIdUsuario(), "Se me ha perdido mi "
				+ mascota.getRaza().getNombre() + ": " + mascota.getNombre()
				+ " en: " + lugar.getNombre());
	}

	public List<Zona> selectAllZonas() {

		return zonas;

	}

	public String notNullString(String text) {
		if (text == null)
			return "";
		else
			return text;

	}
	public Usuario getUsuario(int idUsuario) {
		Usuario usuario = null;
		
		IUsuarioDAO usuarioDAO=new JDBCUsuarioDAO();
		usuario = usuarioDAO.selectUsuario(idUsuario);
		return usuario;
	}
	public Mascota getMascota(int idMascota) {
		Mascota mascota = null;
		IMascotaDAO mascotaDAO=new JDBCMascotaDAO();
		mascota = mascotaDAO.selectMascota(idMascota);
		return mascota;
	}
	public List<Mascota> getMascotas(int idUsuario) {
		List<Mascota> mascotas = null;
		IMascotaDAO mascotaDAO=new JDBCMascotaDAO();
		mascotas = mascotaDAO.selectMascotas(idUsuario);
		return mascotas;
	}

	public List<Lugar> getAllLugares() {
		List<Lugar> lugares = null;
        JDBCLugarDAO lugarDAO = new JDBCLugarDAO();
		lugares = lugarDAO.selectAllLugares();
		return lugares;
	}
	
}

	

